The present invention relates generally to methods for downloading and updating software on electronic systems.
Electronic hardware systems, such as certain fuel system components for gas turbine engines including those for use with aircraft, frequently include software components. These software components can include applications used during regular operation of the hardware, as well as diagnostic, maintenance and other applications used in contexts other than during normal operation. Furthermore, these software components can include components used to boot (i.e., initialize) and manage communication with test equipment. It is often desired to update software to provide for bench and engine testing of hardware in the field, as well as for normal hardware operation. Updating applications using existing boot and management software is relatively simply because update, transmission and booting protocols handled by the boot and management software remains unchanged. Updates to applications can be made to hardware deployed in the field and can be accomplished relatively easily. However, it is sometimes necessary or desired to update the boot and management software on hardware components. Because this type of software governs or otherwise affects updating procedures, it cannot effectively govern updates to itself. An apt analogy would be that a surgeon cannot perform brain surgery on himself or herself.
In the prior art, updates to critical software were difficult. Often these updates cannot be performed in the field in-situ, or even at customer facilities when applicable hardware is removed from an installed location like a gas turbine engine or aircraft. Updates to critical software would typically require that the relevant hardware be returned to the manufacturer for updating by disassembling the hardware and reprogramming relevant printed circuit boards using special tools (e.g., a microprocessor network emulator using a joint test action group (JTAG) adapter) not available in the field. This process is burdensome and time consuming. Particularly in aerospace applications, down time associated with these software updates is undesirable and costly, and can be a burden to manufacturers having to handle and process the hardware associated with the software updates.
Systems and methods for performing software updates have been proposed that utilize external volatile memory (e.g., RAM) to perform an update to critical software. However, the use of volatile memory presents risk of non-recoverable system failure if there is a power failure during the updating process. Specifically, if existing boot and management software is entirely or partially deleted or otherwise in a corrupted state when a power failure occurs, software in the volatile memory will be lost and the hardware may become a “dead box” without the ability to reboot or recover from the power failure. In such a situation, it may be possible to recover functions of the hardware using special tools available in a shop, but this would still prevent the software update from being completed in the field—and would likely ultimately increase the burden of the update due to complications from the power failure.
Moreover, some electronics hardware includes loading functionality to update software, but such functionality is not available in all situations. It may be too burdensome and expensive to add loader functionality to existing hardware deployed in the field.
It is therefore desired to provide an alternative method for updating software on electronics hardware that is deployed in the field.